package main

// Variable Shadowing变量遮蔽
// 使用Go官方提供的go vet工具可以用于对Go源码做一系列静态检查
// 执行go vet -vettool=$(which shadow) -strict main.go 可以检测变量遮蔽问题
// ./main.go:12:2: declaration of "a" shadows declaration at line 7

//在日常编写代码时,要注意同名变量的声明,注意短变量声明与控制语句的结合,才能从根源上尽量避免变量遮蔽问题的发生

var a = 11

func add(n int) {
	// 这里定义了局部变量a,与包级变量a重名了,即局部变量a遮蔽了包级变量a
	// 这里只是修改了局部变量a的值,并不会影响包级变量
	a := 11
	a += n
}

func main() {
	println("before call add, a = ", a)
	add(5)
	println("after call add, a = ", a) // a = 11
}
